
*MEASURING POLITICAL KNOWLEDGE IN ONLINE SURVEYS:
*HOW QUESTION DESIGN CAN IMPROVE MEASURES

*POQ_replication_file (June 2022)
 
/*instructions: Note, this is step two. This file runs on a dataset that has to be produced using the spss files first and then saved as a .dta file. 

This file produces all tables and a few additional analyses shown in the paper and appendix. 
*/

*Stata version SE 17.0

browse

*the data are from a larger project that included various other analyses and dependent variables for other papers. Some of the variable names are thus not the same as the paper. 
*e.g 

*The PolKnow variable is called "full scale" in paper. 
*CandKnow = sophistication in the paper. Behav is behavior,...



 grstyle clear
set scheme s2color
grstyle init
grstyle set plain, box
grstyle color background white
grstyle set color Set1
grstyle set lpattern
grstyle set symbol
grstyle set symbolsize 2 3 4 5, pt: p#
grstyle yesno draw_major_hgrid yes
grstyle yesno draw_major_ygrid yes
grstyle color major_grid gs8
grstyle linepattern major_grid dot
grstyle set legend 4, box inside
grstyle color ci_area gs12%50

tab Mode

gen Female = 0
replace Female =. if Gender == -9
replace Female =. if Gender == 3
replace Female =1 if Gender == 2
replace Female =0 if Gender == 1
codebook Gender Female

codebook RaceEth
gen White = 0
replace White = 1 if (RaceEth==1)
gen Black = 0
replace Black = 1 if (RaceEth==2)
gen Asian = 0
replace Asian = 1 if (RaceEth==3)
*renaming hispanic into latinx.
gen Latinx = 0
replace  Latinx = 1 if (Hispanic==1)
gen OthRace = 0
replace OthRace = 1 if (RaceEth==-9)
replace OthRace = 1 if (RaceEth==4)
replace OthRace = 1 if (RaceEth==6)
tab OthRace

summarize Female White Black Asian Latinx FamIncome EducYrs PartyID PolInt Mode  

**Dependent Variables. 
tab PolKnow , missing
tab CandKnow , missing
*making one summary scale out of two participation variables in the data:
gen Behav = OthrPolBehv + CampnBehv
tab Behav

label variable CandKnow "Sophistication"

*making the web variable that indicates if a person took the survey online (vs. face to face)
gen Web = 0
replace Web =1 if (Mode ==2)


tab Age

*making sure everything is standardized 0-1
tab PartyID, missing
replace PartyID = . if PartyID == 9 
replace PartyID = PartyID/6
replace Age = Age - 18
replace Age = Age/81
sum Age 
sum PartyID
replace PolInt = PolInt - 1
replace PolInt = PolInt/4

tab LibCon
replace LibCon = . if LibCon==9
replace LibCon = LibCon - 1
replace LibCon = LibCon/6

*keeping DV as is. 
tab PolKnow
*not standardized. 0-14 range. 


tab LibCon, missing
*63 missng. 
tab FamInc, missing
replace FamInc = . if FamInc == -9
replace FamInc = . if FamInc == -5
replace FamInc = FamInc -1
replace FamInc = FamInc/27
*now that this is recoded 0-1 the lable is misleading. Keep this in mind. 

tab PartyID, missing


tab Web 


tab Female, missing
tab Black , missing
tab Latinx , missing
tab Asian , missing
tab OthRace , missing
tab Age, missing
tab PartyID , missing
tab FamInc, missing  
codebook Educ 
codebook EducYrs
replace EducYrs = . if EducYrs == -9
tab EducYrs, missing
gen cem_EducYrs = EducYrs
replace EducYrs = EducYrs-1
replace EducYrs = EducYrs/19
tab EducYrs, missing
tab PolInt, missing
tab cem_EducYrs, missing

summarize Behav


*****************Political Knowledge scales. 

gen Most = 0
replace Most = Most + 1 if GlobalWarming == 1
replace Most = Most + 1 if V161514 == 1
replace Most = Most + 1 if V161137 == 1
replace Most = Most + 1 if V162255 == 2
replace Most = Most + 1 if V161516 == 2
replace Most = Most + 1 if V162191a == 2
replace Most = Most + 1 if V161515 == 2

*In response to reviewer comments. What if climate is not in there. 
gen Mostwoutclimate = 0
replace Mostwoutclimate = Mostwoutclimate + 1 if V161514 == 1
replace Mostwoutclimate = Mostwoutclimate + 1 if V161137 == 1
replace Mostwoutclimate = Mostwoutclimate + 1 if V162255 == 2
replace Mostwoutclimate = Mostwoutclimate + 1 if V161516 == 2
replace Mostwoutclimate = Mostwoutclimate + 1 if V162191a == 2
replace Mostwoutclimate = Mostwoutclimate + 1 if V161515 == 2


gen Least =0
replace  Least =  Least + 1 if  V162074b == 1
replace  Least =  Least + 1 if  V162076b == 1
replace  Least =  Least + 1 if  V161513  == 6
replace  Least =  Least + 1 if  V162073b == 1
replace  Least =  Least + 1 if  V162075b == 1
replace  Least =  Least + 1 if  V162137  == 2
replace  Least =  Least + 1 if  V162072  == 1


***reponse to reviewer about closed ended. 
gen Closed =0
replace Closed = Closed +1 if V162255 == 2
replace Closed = Closed + 1 if GlobalWarming == 1
replace Closed = Closed +1 if V162137  == 2
replace Closed = Closed +1 if V162137  == 2
replace Closed = Closed +1 if V161514 == 1
tab Closed



gen Open = 0
replace Open = Open +1 if V162191a == 2
replace Open = Open +1 if V161516 == 2
replace Open = Open +1 if V161515 == 2
replace Open = Open +1 if V162072  == 1
replace Open = Open +1 if V162075b == 1
replace Open = Open +1 if V162073b == 1
replace Open = Open +1 if V161513  == 6
replace Open = Open +1 if V162074b == 1
replace Open = Open +1 if V162076b == 1
tab Open


**rescaling pol know measures 0-1. 


gen PolKnow1 = PolKnow/14 
gen CandKnow1 = CandKnow/16

gen Least1=Least/7
gen Most1=Most/7

gen Open1 = Open/9 
gen Closed1 = Closed/5


gen Mostwoutclimate1=Mostwoutclimate/6


summarize PolKnow CandKnow Behav Least Most Open1 Closed1 Open Closed PolKnow1 CandKnow1  Least1 Most1 PartyID EducYrs Female Black Latinx Asian OthRace PolInt LibCon FamInc Age Web 

*******************************************************************

****Blackwell, Iacus, King and Porro (2009)
*cem can accomodate ordered, continuous, and dichotomous vars. 
**Let's see if this holds up when CEM is used. 

*Diagnostics:
*how imbalanced is the sample?

**need to stick to the demographic characteristics and match on those. 
imb Female Black Latinx Asian OthRace  PartyID FamInc EducYrs PolInt , treatment(Web)

*cem Female Black Latinx Asian OthRace PartyID FamInc EducYrs PolInt , treatment(Web) 

****
*stata will try to match on the missing data. So, I am going to delete missing as recommended.   
drop if FamInc == .
drop if PartyID == .
drop if EducYrs == .
drop if Female == .
*202 from famIncome total cases deleted. 

codebook PolInt
tab Age, missing

cem Female Black Latinx Asian OthRace PartyID(#0) FamInc cem_EducYrs (0 10.5 12.5 17.5) PolInt(#0), treatment(Web) 

*cem Female Black Latinx Asian OthRace PartyID FamInc cem_EducYrs  PolInt(#0), treatment(Web) 
tab cem_matched
tab cem_matched Mode
*use this variable to do t-tests to compare samples to address reviewer comment wondering who is omitted. 

***********************.
************************.
*************************.
**************************.
*step one: Basic Evaluation and analysis of unmatched data. 

table Web

tabulate Web, summarize(PolKnow) means standard

**appendix table B: Basic Descriptives
*first panel
*to run this and compare to the appendix, recall that "polknow" is what I call the full scale in the paper. Candknow = sophistication and Behav = behavior (a count of political participation)

ttest PolKnow, by (Web) unequal
ttest Open, by (Web) unequal
ttest Closed, by (Web) unequal
*second panel
ttest Most, by (Web) unequal
ttest Least, by (Web) unequal
ttest CandKnow, by (Web) unequal
ttest Behav, by (Web) unequal



*.  Figure 1 in the paper standardizes the scales to have a one-point range, which makes the effect of the web more comparable.
******NEW FIGURE 1.
reg PolKnow1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store PolKnow_raw
regress PolKnow1 Web [aweight = cem_weights], vce(robust)
estimates store PolKnow_match

reg Least1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store Bad_raw
regress Least1 Web [aweight = cem_weights], vce(robust)
estimates store Bad_match

reg Most1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt , vce(robust)
estimates store Good_raw
regress Most1 Web [aweight = cem_weights], vce(robust)
estimates store Good_match

reg Closed1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store  Closed1_raw
regress  Closed1 Web [aweight = cem_weights], vce(robust)
estimates store  Closed1_match

reg Open1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store Open1_raw
regress Open1 Web [aweight = cem_weights], vce(robust)
estimates store Open1_match



coefplot (PolKnow_raw, mcolor(black) ciopts(lcolor(black))) (PolKnow_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Full Scale) || (Bad_raw, mcolor(black) ciopts(lcolor(black))) (Bad_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Least Valid) ||(Good_raw, mcolor(black) ciopts(lcolor(black))) (Good_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Most Valid) ||  (Open1_raw, mcolor(black) ciopts(lcolor(black))) (Open1_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Open-ended) || (Closed1_raw, mcolor(black) ciopts(lcolor(black))) (Closed1_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Closed-ended) ||  , drop(_cons) xline(0) nolabels 

***not used in paper.
*figure showing sophistication and behavior
/*
reg CandKnow Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store CandKnow_raw
regress CandKnow Web [aweight = cem_weights], vce(robust)
estimates store CandKnow_match

reg Behav Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store Behav_raw
regress Behav Web [aweight = cem_weights], vce(robust)
estimates store Behav_match

coefplot (CandKnow_raw, mcolor(black) ciopts(lcolor(black))) (CandKnow_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Sophistication Scale) || (Behav_raw, mcolor(black) ciopts(lcolor(black))) (Behav_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Behavior Scale) ||, drop(_cons) xline(0) nolabels  
*/

/*
 ****removing the climate question for reviewer. 
reg Mostwoutclimate1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt , vce(robust)
estimates store Good_raw
regress Mostwoutclimate1 Web [aweight = cem_weights], vce(robust)
estimates store Good_match

reg Most1 Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
estimates store Bad_raw
regress Most1 Web [aweight = cem_weights], vce(robust)
estimates store Bad_match

coefplot (Bad_raw, mcolor(black) ciopts(lcolor(black))) (Bad_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Most) ||(Good_raw, mcolor(black) ciopts(lcolor(black))) (Good_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Most without climate) || (sm_raw, mcolor(black) ciopts(lcolor(black))) (sm_match, mcolor(gray) ciopts(lcolor(gray))), bylabel(Most no rel no clim) || , drop(_cons) xline(0) nolabels 

* removing climate change does weaken the robustness of this scale. p=.062 which only approaches conventional sig. levels. The reviewer's concern is that this variable is polarized/partisan and thus more about partisanship than knowledge. 
*/


***Tables for appendix. 



*for appendix full models behind table 1. 
*this is 7.1.2	Table C:  The Effect of Internet Access on Correctly Answering Political Knowledge Questions used on Various Scales (Raw and Matched Models)
eststo clear

eststo:quietly reg PolKnow Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)	
eststo:quietly reg PolKnow Web [aweight = cem_weights], vce(robust)

eststo:quietly reg Least Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg Least Web [aweight = cem_weights], vce(robust)

eststo:quietly reg Most Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg Most Web [aweight = cem_weights], vce(robust)

eststo:quietly reg Open Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg Open Web [aweight = cem_weights], vce(robust)

eststo:quietly reg Closed Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg Closed Web [aweight = cem_weights], vce(robust)

*Table  in appendix:
*esttab using example.rtf,  b(a3) se r2(3) replace nobaselevels  interaction(" X ") starlevels( + 0.10 * 0.05 ** 0.01 *** 0.001)  
*eststo clear

*Table  in appendix (new, POQ style -- no stars but p values instead):
*this is 7.1.2	Table C:  The Effect of Internet Access on Correctly Answering Political Knowledge Questions used on Various Scales (Raw and Matched Models)
esttab using example.rtf,  cells(b(fmt(%12.3fc)) se(fmt(%12.3fc)) p(fmt(%4.3f))) r2(3) nobaselevels nostar interaction(" X ") replace 
eststo clear

*****
/*
eststo:quietly reg  CandKnow Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg  CandKnow Web [aweight = cem_weights], vce(robust)

eststo:quietly reg  Behav Web Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo:quietly reg  Behav Web [aweight = cem_weights], vce(robust)

esttab using example.rtf,  b(a3) se r2(3) replace nobaselevels  interaction(" X ") starlevels( + 0.10 * 0.05 ** 0.01 *** 0.001)  
eststo clear

****woutclimate.wihout obama religion. 

reg  CandKnow Web##c.Mostwoutclimate Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  CandKnow Web##c.Mostwoutclimate  [aweight = cem_weights], vce(robust)
reg  CandKnow Web##c.Mostsm  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  CandKnow Web##c.Mostsm  [aweight = cem_weights], vce(robust)
margins, over(Mostwoutclimate Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
margins, over(Mostsm Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 5

esttab,  b(a3) se r2(3)  wide  nobaselevels interaction(" X ") starlevels( + 0.10 * 0.05 ** 0.01 *** 0.001) compress
*/


*******************************************************
*******************************************************
*******************************************************

   ***************criterion validity****************

*******************************************************
*******************************************************
eststo clear



**FIGURES IN PAPER:

*****14-item Full Pol Know Scale
reg CandKnow Web##c.PolKnow  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg CandKnow Web##c.PolKnow  [aweight = cem_weights], vce(robust)

margins, over(PolKnow Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 2f. 

***Most least. 
reg  CandKnow Web##c.Most  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  CandKnow  Web##c.Least Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

reg  CandKnow Web##c.Most  [aweight = cem_weights], vce(robust)
reg  CandKnow Web##c.Least  [aweight = cem_weights], vce(robust)

margins, over(Least Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*margins r.Web, dydx(Least)
*fig. 2d
margins, over(Most Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 2e
margins r.Web, dydx(Most)


**closed vs open ended:
reg  CandKnow Web##c.Closed  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  CandKnow  Web##c.Open Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

reg CandKnow Web##c.Closed  [aweight = cem_weights], vce(robust)
reg CandKnow Web##c.Open [aweight = cem_weights], vce(robust)

margins, over(Closed Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 2a
margins, over(Open Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*margins r.Web, dydx(Open)

* the below compares slopes to see if sig diff. 
margins r.Web, dydx(Closed)



**for appendix. 
eststo clear
eststo: reg CandKnow Web##c.PolKnow  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg CandKnow Web##c.PolKnow  [aweight = cem_weights], vce(robust)
eststo: reg CandKnow Web##c.Most  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg CandKnow Web##c.Most  [aweight = cem_weights], vce(robust)
eststo: reg CandKnow  Web##c.Least Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg CandKnow Web##c.Least  [aweight = cem_weights], vce(robust)
esttab using example.rtf,  b(a3) se r2(3) replace nobaselevels  interaction(" X ") starlevels( + 0.10 * 0.05 ** 0.01 *** 0.001)  


******APPENDIX.
*7.1.4	Table E:  The Effect of Internet Access, Open and Closed-ended question scales on Sophistication (Raw and Matched Models)

eststo clear
eststo: reg CandKnow  Web##c.Open Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg CandKnow Web##c.Open [aweight = cem_weights], vce(robust)
eststo: reg CandKnow Web##c.Closed  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg CandKnow Web##c.Closed  [aweight = cem_weights], vce(robust)

esttab using example.rtf,  cells(b(fmt(%12.3fc)) se(fmt(%12.3fc)) p(fmt(%4.3f))) r2(3) nobaselevels nostar interaction(" X ") replace 
eststo clear

*******************************************************
*******************************************************
******Behav. 

***Most least. 
reg  Behav Web##c.Most  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  Behav  Web##c.Least Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

reg  Behav Web##c.Most  [aweight = cem_weights], vce(robust)
reg  Behav Web##c.Least  [aweight = cem_weights], vce(robust)

margins, over(Least Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*margins r.Web, dydx(Least)
*fig. 2d
margins, over(Most Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 2e
margins r.Web, dydx(Most)


**closed vs open ended:
reg  Behav Web##c.Closed  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
reg  Behav  Web##c.Open Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

reg Behav Web##c.Closed  [aweight = cem_weights], vce(robust)
reg Behav Web##c.Open [aweight = cem_weights], vce(robust)

margins, over(Closed Web)
mplotoffset, recast() xsca(ra(-.5 1.5))
*fig 2a
margins, over(Open Web)
mplotoffset, recast() xsca(ra(-.5 1.5))

**for appendix. 
*7.1.5	Table F: The Effect of Internet Access and searchability on Behavior (Full and Matched Models)
eststo clear
eststo: reg Behav  Web##c.Least Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg Behav Web##c.Least  [aweight = cem_weights], vce(robust)
eststo: reg Behav Web##c.Most  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg Behav Web##c.Most  [aweight = cem_weights], vce(robust)
eststo: reg Behav Web##c.PolKnow  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg Behav Web##c.PolKnow  [aweight = cem_weights], vce(robust)
*margins, over(PolKnow Web)
*mplotoffset, recast() xsca(ra(-.5 1.5))
esttab using example.rtf,  cells(b(fmt(%12.3fc)) se(fmt(%12.3fc)) p(fmt(%4.3f))) r2(3) nobaselevels nostar interaction(" X ") replace 
eststo clear



 **for appendix. 
 *table G
 *****7.1.6	Table G: The Effect of Internet Access and searchability on Behavior (Full and Matched Models)
eststo clear
eststo: reg Behav  Web##c.Open Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg Behav Web##c.Open [aweight = cem_weights], vce(robust)
eststo: reg Behav Web##c.Closed  Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)
eststo: reg Behav Web##c.Closed  [aweight = cem_weights], vce(robust)
esttab using example.rtf,  cells(b(fmt(%12.3fc)) se(fmt(%12.3fc)) p(fmt(%4.3f))) r2(3) nobaselevels nostar interaction(" X ") replace 
eststo clear



**********APPENDIX
*7.1.3	Table D:  The Effect of Internet Access, Most and Least Valid, and Full Scale on Sophistication (Raw and Matched Models)

eststo clear
eststo:quietly reg CandKnow Web##c.Least [aweight = cem_weights], vce(robust)
eststo:quietly reg CandKnow Web##c.Least Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

eststo:quietly reg CandKnow Web##c.Most  [aweight = cem_weights], vce(robust)
eststo:quietly reg  CandKnow Web##c.Most Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

eststo:quietly reg CandKnow Web##c.PolKnow [aweight = cem_weights], vce(robust)
eststo:quietly reg  CandKnow Web##c.PolKnow Female Black Latinx Asian OthRace Age PartyID FamInc EducYrs PolInt, vce(robust)

esttab,  b(a3) se r2(3)  wide  nobaselevels interaction(" X ") starlevels( + 0.10 * 0.05 ** 0.01 *** 0.001) compress

*Table  in appendix:
*7.1.3	Table D:  The Effect of Internet Access, Most and Least Valid, and Full Scale on Sophistication (Raw and Matched Models)
esttab using example.rtf,  cells(b(fmt(%12.3fc)) se(fmt(%12.3fc)) p(fmt(%4.3f))) r2(3) nobaselevels nostar interaction(" X ") replace 
eststo clear




